package logicaPresentacion;

import javax.swing.*;

import java.util.Map;
import java.util.Map.Entry;
import java.awt.*;
import java.awt.event.*;

import logicaNegocio.Alumno;
import logicaNegocio.GestionAlumnos;
import logicaNegocio.GestionProfesores;
import logicaNegocio.Profesor;
 
public class Identificacion extends JInternalFrame
{
    /**
	 * 
	 */
	private static final long serialVersionUID = -3087158414788863404L;
	private JTextField txtUser, txtPass;
    private JLabel lblUser, lblPass;
    private JButton btnAceptar, btnCancelar;
    private GestionAlumnos gA;
    private GestionProfesores gP;
    private boolean clave,admin,alumno,profesor;
    
    public Identificacion(GestionAlumnos gA,GestionProfesores gP)
    {
    this.gA = gA;
    this.gP = gP;
    
    Container contenedor = getContentPane();
    contenedor.setLayout(new FlowLayout());
 
    txtUser = new JTextField(10);
    lblUser = new JLabel("Dni: ");
    txtUser.setToolTipText("Escriba su Dni");        
    contenedor.add( Box.createVerticalStrut(50) );
    contenedor.add(lblUser);
    contenedor.add(txtUser);
 
    txtPass = new JPasswordField(10);
    lblPass = new JLabel("Contrasena: ");
    txtPass.setToolTipText("Escriba su contrasena");
    contenedor.add(lblPass);
    contenedor.add(txtPass);
 
    btnAceptar = new JButton("Aceptar");
    getRootPane().setDefaultButton(btnAceptar);
 
    btnCancelar = new JButton("Cancelar");
    contenedor.add(btnAceptar);
    contenedor.add(btnCancelar);
 
	this.setSize(200,200);
    ActionListener escuchadorbtnAceptar = new ActionListener()
    {
        public void actionPerformed(ActionEvent evt)
        {
            try
            {                    
                if (txtUser.getText().length() > 0 && txtPass.getText().length() > 0 )
                {
                    if( identificarAdministrador( txtUser.getText(), txtPass.getText() ) == true)    //enviar datos a validar
                    {
                      	 admin = true;
                    	 alumno = false;
                    	 profesor = false;
                    	 dispose(); 
                    }
                    
                    else
                    {
                    	
                    	if( identificarAlumno( txtUser.getText(), txtPass.getText() )==true )    //enviar datos a validar
                        {
                        	 admin = false;
                        	 alumno = true;
                        	 profesor = false;
                        	 dispose(); 
                         }
                    	else
                    	{
                    		
                    		if( identificarProfesor( txtUser.getText(), txtPass.getText() ) ==true )    //enviar datos a validar
                            {
                            	 admin = false;
                            	 alumno = false;
                            	 profesor = true;
                            	 dispose(); 
                             }
                    		else
                    		{
	                            JOptionPane.showMessageDialog(null, "El nombre de usuario y/o contrasenia no son validos.");
	                            txtUser.setText("");    //limpiar campos
	                            txtPass.setText("");        
		                             
		                            txtUser.requestFocusInWindow();
                        		}
                        	}
                        }
                    }
                    else
                    {
                        JOptionPane.showMessageDialog(null, "Debe escribir nombre de usuario y contrasenia.\n" +
                        "NO puede dejar ningun campo vacio");
                    }
 
                } catch (Exception e)
                {
                    e.printStackTrace();
                }
                 
            }
        };
        btnAceptar.addActionListener(escuchadorbtnAceptar);     

    ActionListener escuchadorbtnCancelar=new ActionListener()
    {
        public void actionPerformed(ActionEvent evt)
        {
            dispose();    
        }
    };
    btnCancelar.addActionListener(escuchadorbtnCancelar);      
    setTitle("Autentificacion de usuarios");
    setSize(400,150);           
    setResizable(false);      
    
    setVisible(true);    
 
    }  
  public boolean identificarAdministrador(String elPw, String elUsr) 
    	{  
        if ((elUsr.equals ("a"))&&(elPw.equals("a")))
		{
			clave = true;
		}
	else 
		{
			
			clave = false;
		}
        return clave;
  	}
  
  public boolean identificarAlumno(String Dni, String Nombre) 
  {
	  Map <String, Alumno> alumnos = gA.getAlumnos();

		if(alumnos != null)
		{										
			java.util.Iterator<Entry<String, Alumno>> it = gA.getAlumnos().entrySet().iterator();
			 
		    while (it.hasNext())
		    {
		    	@SuppressWarnings("rawtypes")
				Map.Entry e = (Map.Entry)it.next();
		        Alumno A = (Alumno)gA.getAlumnos().get(e.getKey());
				
				if (A.getNombre().equals(Nombre))
				{
					if (e.getKey().equals(Dni))
					{
						clave = true;		
					}
				}
			}
		}
		return clave;
			
	}
  
  public boolean identificarProfesor(String Dni, String Nombre) 
	{	
		if(gP.getProfesores()!= null)
		{			
			java.util.Iterator<Entry<String, Profesor>> it = gP.getProfesores().entrySet().iterator();
			 
		    while (it.hasNext()) 
		    {
		    	@SuppressWarnings("rawtypes")
				Map.Entry e = (Map.Entry)it.next();
		    	Profesor P = (Profesor)gP.getProfesores().get(e.getKey());
				if (P.getNombre().equals(Nombre))
				{
					if (e.getKey().equals(Dni))
					
					{
						clave = true;
					}
				}
			}
		   
		}
		   return clave;
	}
	public String getDni()
	{
		return txtUser.getText();
	}
	
	public boolean getAdmin()
	{
		return admin;
	}
	
	public boolean getAlumno()
	{
		return alumno;
	}
	
	public boolean getProfesor()
	{
		return profesor;
	}

}
